import type { PageResult, RoleApi, UserApi } from '#/api/types';

import { Http as http } from '#/api/http';

/**
 * 获取用户信息
 * @param userId 用户ID，不传则获取当前登录用户信息
 */
export async function getUserInfoApi(userId?: number) {
  return userId
    ? http.get<UserApi.UserInfoDetailVO>(`/system/user/info/${userId}`)
    : http.get<UserApi.UserInfoDetailVO>('/system/user/current/info');
}

/**
 * 更新当前用户信息
 * @param data 用户信息
 */
export async function updateCurrentUserInfoApi(data: UserApi.UpdateParams) {
  return http.post<UserApi.UserInfoDetailVO>(
    '/system/user/current/update',
    data,
  );
}

/**
 * 管理员更新用户信息
 * @param data 用户信息
 */
export async function updateUserInfoApi(data: UserApi.UpdateParams) {
  return http.post<UserApi.UserInfoDetailVO>('/system/user/admin/update', data);
}

/**
 * 修改当前用户密码
 * @param data 密码信息
 */
export async function changeCurrentPasswordApi(
  data: UserApi.PasswordChangeParams,
) {
  return http.post<string>('/system/user/current/password/change', data);
}

/**
 * 管理员修改用户密码
 * @param data 密码信息
 */
export async function changePasswordApi(data: UserApi.PasswordChangeParams) {
  return http.post<string>('/system/user/admin/password/change', data);
}

/**
 * 更新用户状态
 * @param data 状态信息
 */
export async function updateUserStatusApi(data: UserApi.StatusUpdateParams) {
  return http.post<string>('/system/user/status/update', data);
}

/**
 * 删除用户
 * @param userId 用户ID
 */
export async function deleteUserApi(userId: number) {
  return http.post<string>('/system/user/delete', { userId });
}

/**
 * 批量删除用户
 * @param userIds 用户ID数组
 */
export async function batchDeleteUsersApi(userIds: number[]) {
  return http.post<string>('/system/user/batch/delete', { userIds });
}

/**
 * 获取用户列表
 * @param params 查询参数
 */
export async function getUserListApi(params: UserApi.UserListParams) {
  return http.get<PageResult<UserApi.UserInfoDetailVO>>(
    '/system/user/list',
    params,
  );
}

/**
 * 获取用户角色列表
 * @param userId 用户ID
 */
export async function getUserRolesApi(userId: number) {
  return http.get<RoleApi.RoleVO[]>('/system/user/role/list', { userId });
}

/**
 * 分配用户角色
 * @param data 角色分配参数
 */
export async function assignUserRolesApi(data: UserApi.RoleAssignParams) {
  return http.post<string>('/system/user/role/assign', data);
}

/**
 * 批量分配用户角色
 * @param data 批量角色分配参数
 */
export async function batchAssignUserRolesApi(
  data: UserApi.RoleBatchAssignParams,
) {
  return http.post<string>('/system/user/role/batch/assign', data);
}

/**
 * 移除用户角色
 * @param data 角色移除参数
 */
export async function removeUserRoleApi(data: UserApi.RoleRemoveParams) {
  return http.post<string>('/system/user/role/remove', data);
}

/**
 * 批量移除用户角色
 * @param data 批量角色移除参数
 */
export async function batchRemoveUserRolesApi(
  data: UserApi.RoleBatchRemoveParams,
) {
  return http.post<string>('/system/user/role/batch/remove', data);
}
